/******************************************************************
编程环境：----------
        软件:Arduino2.3.4
        硬件:Mega2560主控板, Mega2560扩展版,3s电池盒，锂电池*3
             Windows11操作系统电脑，方口USB数据线*1
             四麦克纳姆轮小车，4路巡线模块*1，杜邦线若干
        库函数:<Arduino.h>, <uni_motor.h>

实验目的：-----------
        1.学会使用8路巡线模块；
        2.搭建小车巡线程序框架。

操作流程：----------
        详细请看操作视频.

实验现象：-----------
        机器人沿着场地中的黑线运动.

实验接线简略图：----------
    ￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣
    电池仓         mega2560扩展版         4路巡线模块        车轮
    12V母座~~~~~~~~~板载供电口1                
                      5V--------------------5V
                      GND-------------------GND
                      A9 -------------------S1(悬空，意思就是不接任何线)
                      A9 -------------------S2(小车车头中间左侧)
                      A9 -------------------S2(小车车头中间左侧)
                      A10 ------------------S4(悬空，意思就是不接任何线)
                      M1  ................................小车左前轮
                      M2  ................................小车右前轮
                      M3  ................................小车左后轮
                      M4  ................................小车右后轮

    小车俯视图接线如下简易图所示----------------------------------------
                              车头
                       S1  S2-A9 S3-A10  S4
                              _____
                左前轮        |    |         右前轮
                (M1)          |   |          (M2)
                  -----------------------------
                  |                           |
                  |                           |
                  |                           |
                  |                           |
                  |                           |
                  |                           |
                  |                           |
                  |                           |
                  |                           |
                  -----------------------------
                (M3)                        (M4)
                左后轮                      右后轮
                              车尾
                             
    ￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣￣
2024.12.19 Uni Tongchuang Intelligent Robot Technology CO.,Ltd
*******************************************************************/


#include "uni_motor.h" //调用编码电机库
#define RATE 115200    //定义串口波特率
#define motor_speed_lf  30 //设定小车左前轮速度,pwm脉宽范围-255~255
#define motor_speed_rf  30 //设定小车右前轮速度,pwm脉宽范围-255~255
#define motor_speed_lb  30 //设定小车左后轮速度,pwm脉宽范围-255~255
#define motor_speed_rb  30 //设定小车右后轮速度,pwm脉宽范围-255~255

//电机参数部分----------------------------
/*枚举小车状态
  FORWARD:前进  BACK:后退  LEFT:左转  RIGHT:右转
  TRANS_LEFT 左平移     TRANS_RIGHT 右平移   STOP:小车停止*/
enum{FORWARD=1,BACK,LEFT,RIGHT,TRANS_LEFT,TRANS_RIGHT,STOP};
UNI_MOTOR motor1(1, true);  //声明小车左前轮
UNI_MOTOR motor2(2, true);  //声明小车右前轮
UNI_MOTOR motor3(3, true);  //声明小车左后轮
UNI_MOTOR motor4(4, true);  //声明小车右后轮


int sensor_pin_number = 2; //4路巡线传感器目前使用的引脚数
int grayscale_sensor_pin[2] = {A10,A9}; //定义巡线模块引脚
int grayscale_data[2] ={0,0}; //存储巡线传感器触发值

void setup() {
  delay(1000);
  Serial.begin(RATE);//打开串口
  motor_init();      //编码电机引脚初始化
  grayscale_init();  //巡线传感器引脚初始化
}

void loop() {
  tracking();  //小车巡线
}
